/**
 * 验证 PostgreSQL 迁移完成情况
 */

const fs = require('fs')
const path = require('path')

function verifyPostgresMigration() {
  console.log('🔍 验证 PostgreSQL 迁移完成情况...\n')
  
  let issues = []
  let successes = []
  
  // 1. 检查 JSON 文件是否已删除
  console.log('🗑️  检查 JSON 文件清理:')
  
  const jsonFiles = [
    'lib/data-store.ts',
    'data/tools.json',
    'data/users.json',
    'data/categories.json',
    'data/reviews.json',
    'data/favorites.json'
  ]
  
  jsonFiles.forEach(file => {
    if (!fs.existsSync(file)) {
      console.log(`   ✅ ${file} - 已删除`)
      successes.push(`JSON文件已删除: ${file}`)
    } else {
      console.log(`   ❌ ${file} - 仍然存在`)
      issues.push(`JSON文件未删除: ${file}`)
    }
  })
  
  // 检查 data 目录
  if (!fs.existsSync('data')) {
    console.log('   ✅ data/ 目录 - 已删除')
    successes.push('data目录已删除')
  } else {
    console.log('   ⚠️  data/ 目录 - 仍然存在')
    issues.push('data目录仍然存在')
  }
  
  // 2. 检查新的数据库文件
  console.log('\n🗄️ 检查 PostgreSQL 数据库文件:')
  
  const dbFiles = [
    'lib/database.ts',
    'scripts/init-database.ts',
    'prisma/schema.prisma'
  ]
  
  dbFiles.forEach(file => {
    if (fs.existsSync(file)) {
      console.log(`   ✅ ${file} - 存在`)
      successes.push(`数据库文件存在: ${file}`)
    } else {
      console.log(`   ❌ ${file} - 缺失`)
      issues.push(`数据库文件缺失: ${file}`)
    }
  })
  
  // 3. 检查数据库文件内容
  console.log('\n📄 检查数据库文件内容:')
  
  try {
    const dbContent = fs.readFileSync('lib/database.ts', 'utf8')
    
    if (dbContent.includes('PrismaClient')) {
      console.log('   ✅ 使用 PrismaClient')
      successes.push('数据库文件使用PrismaClient')
    } else {
      console.log('   ❌ 未使用 PrismaClient')
      issues.push('数据库文件未使用PrismaClient')
    }
    
    if (dbContent.includes('ensureDatabaseConnection')) {
      console.log('   ✅ 包含数据库连接检查')
      successes.push('包含数据库连接检查')
    } else {
      console.log('   ❌ 缺少数据库连接检查')
      issues.push('缺少数据库连接检查')
    }
    
    if (dbContent.includes('getToolsFromJson') || dbContent.includes('data-store')) {
      console.log('   ❌ 仍包含 JSON 文件引用')
      issues.push('数据库文件仍包含JSON文件引用')
    } else {
      console.log('   ✅ 无 JSON 文件引用')
      successes.push('数据库文件无JSON文件引用')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取数据库文件')
    issues.push('无法读取数据库文件')
  }
  
  // 4. 检查环境变量配置
  console.log('\n🌍 检查环境变量配置:')
  
  try {
    const envContent = fs.readFileSync('.env.local', 'utf8')
    
    if (envContent.includes('FORCE_DATABASE=true')) {
      console.log('   ✅ FORCE_DATABASE=true')
      successes.push('环境变量强制使用数据库')
    } else {
      console.log('   ❌ FORCE_DATABASE 未设置为 true')
      issues.push('环境变量未强制使用数据库')
    }
    
    if (envContent.includes('DATABASE_URL=')) {
      console.log('   ✅ DATABASE_URL 已配置')
      successes.push('数据库URL已配置')
    } else {
      console.log('   ❌ DATABASE_URL 未配置')
      issues.push('数据库URL未配置')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取环境变量文件')
    issues.push('无法读取环境变量文件')
  }
  
  // 5. 检查 package.json 脚本
  console.log('\n📦 检查 package.json 脚本:')
  
  try {
    const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'))
    
    if (packageJson.scripts['init:database']) {
      console.log('   ✅ init:database 脚本存在')
      successes.push('数据库初始化脚本存在')
    } else {
      console.log('   ❌ init:database 脚本缺失')
      issues.push('数据库初始化脚本缺失')
    }
    
    if (packageJson.scripts['init:admin']) {
      console.log('   ✅ init:admin 脚本存在')
      successes.push('管理员初始化脚本存在')
    } else {
      console.log('   ❌ init:admin 脚本缺失')
      issues.push('管理员初始化脚本缺失')
    }
    
  } catch (error) {
    console.log('   ❌ 无法读取 package.json')
    issues.push('无法读取package.json')
  }
  
  // 6. 生成迁移报告
  console.log('\n📋 PostgreSQL 迁移报告:')
  console.log('================================')
  
  if (issues.length === 0) {
    console.log('🎉 PostgreSQL 迁移完全成功!')
    console.log(`✅ 完成项目: ${successes.length} 个`)
    
    console.log('\n🚀 下一步操作:')
    console.log('1. 配置 PostgreSQL 数据库连接')
    console.log('2. 运行数据库迁移: npx prisma db push')
    console.log('3. 初始化数据库: npm run init:database')
    console.log('4. 创建管理员: npm run init:admin')
    console.log('5. 启动应用: npm run dev')
    
    console.log('\n📊 迁移统计:')
    console.log(`   删除的 JSON 文件: ${jsonFiles.length} 个`)
    console.log(`   创建的数据库文件: ${dbFiles.length} 个`)
    console.log(`   更新的配置文件: 3 个`)
    
  } else {
    console.log(`❌ 发现 ${issues.length} 个问题:`)
    issues.forEach((issue, index) => {
      console.log(`   ${index + 1}. ${issue}`)
    })
    
    console.log('\n🔧 修复建议:')
    console.log('1. 手动删除剩余的 JSON 文件')
    console.log('2. 检查数据库文件是否正确创建')
    console.log('3. 更新环境变量配置')
    console.log('4. 重新运行迁移脚本')
  }
  
  // 7. 提供测试命令
  console.log('\n🧪 测试命令:')
  console.log('# 测试数据库连接')
  console.log('npx prisma db pull')
  console.log('')
  console.log('# 初始化数据库')
  console.log('npm run init:database')
  console.log('')
  console.log('# 启动应用')
  console.log('npm run dev')
  console.log('')
  console.log('# 访问管理后台')
  console.log('http://localhost:3000/admin')
  
  return issues.length === 0
}

// 运行验证
if (require.main === module) {
  const success = verifyPostgresMigration()
  
  console.log('\n' + '='.repeat(50))
  if (success) {
    console.log('✨ PostgreSQL 迁移验证通过!')
    console.log('现在应用完全使用 PostgreSQL 数据库')
  } else {
    console.log('🔧 PostgreSQL 迁移需要进一步修复')
  }
  
  process.exit(success ? 0 : 1)
}

module.exports = { verifyPostgresMigration }
